

# 配置日志记录器
import logging

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QGraphicsLinearLayout, QSizePolicy, QGraphicsGridLayout

from 程序核心代码.mvvm重构.基础定义.基础图形项.节点图形项.节点图形项 import 节点基础图形项

logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s')
日志记录器 = logging.getLogger(__name__)

class 带布局的节点基础图形项(节点基础图形项):
    def __init__(self, 节点模型,父容器节点图形项管理器, 父项=None):
        super().__init__(节点模型,父容器节点图形项管理器, 父项)
        self.调试模式 = False  # 调试模式开关
        # 设置日志等级
        if self.调试模式:
            日志记录器.setLevel(logging.DEBUG)
            日志记录器.debug(f"{self.__class__.__name__}调试模式已开启")
        else:
            日志记录器.setLevel(logging.ERROR)  # 只显示警告及以上级别的日志

        self.主体布局 = QGraphicsLinearLayout(Qt.Vertical, self)
        self.setLayout(self.主体布局)
        self.初始化布局()

    def 初始化布局(self):
        self.初始化标题区()
        self.初始化连接区()
        self.初始化介绍区()
        self.初始化容器区()

    def 重新排列节点布局(self):
        if hasattr(self, '标题区布局'):
            if self.标题区布局.count() > 0:
                self.主体布局.addItem(self.标题区布局)
        if hasattr(self, '连接区布局'):
            if self.连接区布局.count() > 0:
                self.主体布局.addItem(self.连接区布局)
        if hasattr(self, '介绍区布局'):
            if self.介绍区布局.count() > 0:
                self.主体布局.addItem(self.介绍区布局)
        if hasattr(self, '容器区布局'):
            if self.容器区布局.count() > 0:
                self.主体布局.addItem(self.容器区布局)
        self.主体布局.invalidate()
        self.主体布局.activate()
    def 初始化标题区(self):
        self.标题区布局 = QGraphicsLinearLayout(Qt.Horizontal)

    def 初始化介绍区(self):
        #if hasattr(起始接口.节点定义, '节点介绍') and 起始接口.节点定义.节点介绍:
        if  self.图形项属性.get('节点介绍') is not None:
            self.介绍区布局 = QGraphicsLinearLayout(Qt.Horizontal)
            self.介绍区布局.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Minimum)  # 设置尺寸策略 宽度最小，高度最小


    def 初始化连接区(self):
        self.连接区布局 = QGraphicsGridLayout()  # 连接区布局  具有 3 行 2 列
        self.连接区布局.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Minimum)  # 设置尺寸策略 宽度自适应，高度最小

    def 初始化容器区(self):
        # 需要容器自行继承实现
        pass
